package longrise.phone.com.bjjt_henan.Utils;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.text.method.TransformationMethod;
import android.text.style.ForegroundColorSpan;
import android.widget.EditText;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Pattern;

import longrise.phone.com.bjjt_henan.R;

/**
 * Created by Administrator on 2016/5/13.
 */
public class CommontUtils {
    public static SimpleDateFormat dateSimple = new SimpleDateFormat(
            "yyyy-MM-dd HH:mm:ss");

    /**
     * 获取bitmap的大小
     */
    @SuppressLint("NewApi")
    public static int getBitmapSize(Bitmap bitmap) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            // API 19
            return bitmap.getAllocationByteCount();
        }
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {
            // API 12
            return bitmap.getByteCount();
        }
        return bitmap.getRowBytes() * bitmap.getHeight(); // earlier version
    }

    // bitmap转byte[]
    public static byte[] BitmaptoBytes(Bitmap bm) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.JPEG, 80, baos);
        return baos.toByteArray();
    }

    /**
     * Bitmap 转化为序列化的字符
     */
    public static String Bitmap2Bytes(Bitmap bm) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        return com.longrise.LEAP.Base.IO.JSONSerializer.getInstance()
                .Serialize(baos.toByteArray());
    }

    /**
     * 返回系统当前时间 :xxxx年xx月xx日 hh:mm:ss
     *
     * @return
     */
    public static String getNowTime() {
        try {
            return dateSimple.format(new Date()) + "";
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 改变部分字体的颜色
     *
     * @param text：字符串
     * @param strs：变色的字符集合
     * @param colors：颜色的集合
     * @return
     */
    /*public static CharSequence changeStrColor(String text, String[] strs, int[] colors) {
        if (strs.length > colors.length) {
            return text;
        }
        SpannableStringBuilder builder = new SpannableStringBuilder(text);
        for (int i = 0; i < strs.length; i++) {
            int color = colors[i];
            String indexStr = strs[i];
            int start = text.indexOf(indexStr);
            int end = start + indexStr.length();
            builder.setSpan(new ForegroundColorSpan(color), start, end,
                    Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
        }
        return builder;
    }*/

    /**
     * 改变部分字体的颜色
     *
     * @param text：字符串
     * @param indexStr：变色的字符
     * @param color：变色的字符颜色
     * @return
     */
    public static CharSequence changeStrColor(String text, String indexStr, Integer color) {
        if (null == text || null == indexStr) {
            return text;
        }
        int start = text.indexOf(indexStr);
        if (start < 0) {
            return text;
        }
        SpannableStringBuilder builder = new SpannableStringBuilder(text);
        int end = start + indexStr.length();
        builder.setSpan(new ForegroundColorSpan(color), start, end,
                Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
        return builder;
    }

    /**
     * 获取责任类型
     *
     * @param duty
     * @return
     */
    public static String getDutyStr(String duty) {
        if (TextUtils.equals(duty, "0")) {
            return "全责";
        } else if (TextUtils.equals(duty, "1")) {
            return "无责";
        } else if (TextUtils.equals(duty, "2")) {
            return "同责";
        } else if (TextUtils.equals(duty, "3")) {
            return "主责";
        } else if (TextUtils.equals(duty, "4")) {
            return "次责";
        }
        return "未知";
    }

    /**
     * 读取资源中的大图片
     *
     * @param context
     * @param resId
     * @return
     */
    public static Bitmap readBitmap(Context context, int resId) {
        BitmapFactory.Options opt = new BitmapFactory.Options();
        opt.inPreferredConfig = Bitmap.Config.RGB_565;
        opt.inPurgeable = true;
        opt.inInputShareable = true;
        //获取资源图片
        InputStream is = context.getResources().openRawResource(resId);
        return BitmapFactory.decodeStream(is, null, opt);
    }

    /**
     * 设置密码是否是明文
     */
    public static void setSeePwd(EditText editText) {
        if (editText != null) {
            TransformationMethod method = editText.getTransformationMethod();
            if (method instanceof PasswordTransformationMethod) {
                //可见
                editText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
            } else {
                //隐藏
                editText.setTransformationMethod(PasswordTransformationMethod.getInstance());
            }
            //移动光标到末尾
            editText.setSelection(editText.getText().toString().length());
        }
    }

    private static DisplayImageOptions options;

    //实例化imageloader的参数
    public static DisplayImageOptions getOptions() {
        if (null == options) {
            DisplayImageOptions.Builder builder = new DisplayImageOptions.Builder();
            builder.showImageForEmptyUri(R.mipmap.download_fail1);
            builder.showImageOnFail(R.mipmap.download_fail);
            builder.showImageOnLoading(R.mipmap.reflash);
            builder.cacheInMemory(false);
            builder.cacheOnDisk(true);
            builder.imageScaleType(ImageScaleType.EXACTLY_STRETCHED);
            options = builder.build();
        }
        return options;
    }

    public static List<String> getAccidentTypes() {
        /**
         * 以添加的顺序位置给后台传值，从1开始计算，所以注意添加的顺序
         */
        List<String> lists = new ArrayList<String>();
        lists.add("同车道行驶的车辆追撞前车尾部的");
        lists.add("借道通行或变更车道时未让正常行驶的车辆先行的");
        lists.add("通过没有交通信号的交叉路口时，未让优先通行的一方先行的");
        lists.add("相对方向来车左转弯车辆未让直行车辆，或右转弯车辆未让左转弯车辆先行的");
        lists.add("不按照交通信号指示通行的");
        lists.add("交叉路口先放行车辆未驶离路口时，后放行车辆未让行的");
        lists.add("在道路上会车不按规定通行或让行的");
        lists.add("逆向行驶的");
        lists.add("不按规定强行超车的");
        lists.add("行经交叉路口、窄桥、弯道、陡坡、隧道、人行横道路段时超车的");
        lists.add("在只有一条机动车道的道路上，从前车右侧超越的");
        lists.add("遇前方车辆停车排队或者缓慢行驶时，从前方车辆两侧穿插或者超越行驶的");
        lists.add("在车道减少的路口、路段，遇前方车辆停车排队或者缓慢行驶的，不依次交替驶入路口、路段的");
        lists.add("在禁止掉头或者在允许掉头的地方未让正常行驶车辆先行的");
        lists.add("倒车、溜车、车辆失控与其他车辆发生碰撞的");
        lists.add("在专用车道内行驶或驶入禁行线的");
        lists.add("开关车门造成交通事故的");
        lists.add("车辆进出停车场、停车位或者由路边、非机动车道进出道路与正常行驶车辆、停放车辆发生交通事故的，及在机动车道上违法停车的");
        lists.add("车辆装载货物超长、超宽、超高部分或者货物在遗洒、飘散过程中导致交通事故的");
        lists.add("不按规定牵引车辆造成交通事故的");
        lists.add("单方发生交通事故的");
        lists.add("其他情形");

        return lists;
    }

    /**
     * 获取车牌的首字母简称
     *
     * @return
     */
    public static List<String> getCarnoShorts() {
        List<String> shorts = new ArrayList<String>();
        shorts.add("豫");
        shorts.add("京");
        shorts.add("津");
        shorts.add("冀");
        shorts.add("晋");
        shorts.add("蒙");
        shorts.add("辽");
        shorts.add("吉");
        shorts.add("黑");
        shorts.add("沪");
        shorts.add("苏");
        shorts.add("浙");
        shorts.add("皖");
        shorts.add("闽");
        shorts.add("赣");
        shorts.add("鲁");
        shorts.add("鄂");
        shorts.add("湘");
        shorts.add("粤");
        shorts.add("桂");
        shorts.add("琼");
        shorts.add("渝");
        shorts.add("川");
        shorts.add("贵");
        shorts.add("云");
        shorts.add("藏");
        shorts.add("陕");
        shorts.add("甘");
        shorts.add("青");
        shorts.add("宁");
        shorts.add("新");

        return shorts;
    }

    private static final String NAME = "[\u4e00-\u9fa5]{2,16}"; //检测是否是中文名（长度最大16位）
    private static final String ACCOUNT = "^(?![0-9]+$)[0-9A-Za-z]{6,10}$";//由6到10位的字母和数字组成,不能为纯数字
    private static final String BANKNUM = "[0-9]{16,19}";//纯数字,16位到19位不等
    private static final String PWD = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,15}$";//由6到15位的字母和数字组成,不能为纯数字或字母
    private static final String CARVIN = "^[a-zA-Z0-9]{17}$"; // 车架VIN正则

    public static boolean isChinaName(String name) {
        if (TextUtils.isEmpty(name)) {
            return false;
        }
        return Pattern.compile(NAME).matcher(name).matches();
    }

    public static boolean isAccount(String account) {
        if (TextUtils.isEmpty(account)) {
            return false;
        }
        return Pattern.compile(ACCOUNT).matcher(account).matches();
    }

    public static boolean isBank(String banknum) {
        if (TextUtils.isEmpty(banknum)) {
            return false;
        }
        return Pattern.compile(BANKNUM).matcher(banknum).matches();
    }

    public static boolean isPassword(String pwd) {
        if (TextUtils.isEmpty(pwd)) {
            return false;
        }
        return Pattern.compile(PWD).matcher(pwd).matches();
    }

    public static boolean isCarvin(String carvin) {
        if (TextUtils.isEmpty(carvin)) {
            return false;
        }
        return Pattern.compile(CARVIN).matcher(carvin).matches();
    }
}


